const cloud = require('wx-server-sdk');
const xlsx = require('node-xlsx')

cloud.init({
    env: cloud.DYNAMIC_CURRENT_ENV
});

const db = cloud.database();

// 创建集合云函数入口函数
exports.main = async (event, context) => {
    try {
        // 请求参数
        let {
            conditions
        } = event.data

        if (typeof conditions == "string") {
            // 未传递筛选条件时 conditions会默认等于"1"
            conditions = {}
        }

        // 构建查询条件
        let query = db.collection(conditions.collectionName)
        // 文件名称
        let fileName = `${conditions.title}${new Date().getTime()}.xlsx`

        // 保存查询的类型 list-列表 detail-详情
        let findType = conditions.type
        // 删除不需要的字段
        delete conditions.type
        delete conditions.title
        delete conditions.collectionName

        // 时间范围筛选
        if (conditions.startTime && conditions.endTime) {
            conditions = {
                ...conditions,
                createTime: db.command.gte(new Date(conditions.startTime)) // 大于等于开始时间
                    .and(db.command.lte(new Date(conditions.endTime))) // 小于等于结束时间
            }
            delete conditions.startTime
            delete conditions.endTime
        }

        query = query.where(conditions) // 添加筛选条件
        query = query.orderBy('createTime', 'desc') // 排序

        // 导出数据
        const consumeRecord = await query.get()

        let excelData = []
        let header = []
        // 列表数据(日常会员消费记录管理汇总/会员基本资料管理汇总/会员商品折扣管理汇总/会员福利券记录管理汇总/会员优惠券记录管理)
        if (findType == 'list') {
            header = ['跨界会员名称', '分销关联人', '提成关联人', '积分', '金豆', '创建时间']
            excelData.push(header)
            consumeRecord.data.forEach(item => {
                let row = []
                row.push(item.userName)
                row.push(item.distributionPerson)
                row.push(item.commissionsPerson)
                row.push(item.integral)
                row.push(item.goldPea)
                row.push(item.createTime)
                excelData.push(row)
            })
        }
        // 详情数据(消费积分信息/折扣记录信息/福利券记录信息/优惠券记录信息)
        if (findType == 'detail') {
            header = ['日期时间', '商家', '购买商品', '商品属性', '总消费积分', '享受折扣', '会员价', '消费方式', '快递折扣', '消费积分', '剩余积分', '优惠卷类型', '优惠卷说明']
            excelData.push(header)
            consumeRecord.data[0].consumeRecord.forEach(item => {
                let row = []
                row.push(item.consumeTime)
                row.push(item.merchantName)
                row.push(item.goods)
                row.push(item.goodsType == 1 ? '常规商品' : item.goodsType == 2 ? '跨界商品' : item.goodsType == 3 ? '组合商品' : '')
                row.push(item.totalConsumeIntegral)
                row.push(item.discount)
                row.push(item.memberPrice)
                row.push(item.consumeType == 1 ? '积分' : '金豆')
                row.push(item.expressDiscount)
                row.push(item.consumeIntegral)
                row.push(item.residueIntegral)
                row.push(item.couponType == 1 ? '消费券' : '兑换券')
                row.push(item.couponExplain)

                excelData.push(row)
            })
        }

        let buffer = xlsx.build([{
            name: fileName,
            data: excelData
        }]);

        //上传到云存储
        const fileData = await cloud.uploadFile({
            cloudPath: `xlsx/${fileName}`,
            fileContent: buffer
        })

        return {
            code: 200,
            msg: "操作成功",
            data: fileData.fileID,
        }
    } catch (err) {
        console.log("err----", err)
    }
};